/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.unicon.autoservicio.controller;

import com.unicon.autoservicio.dao.CalidadDAO;
import com.unicon.autoservicio.dao.CreditosDAO;
import com.unicon.autoservicio.dao.FacturacionDAO;
import com.unicon.autoservicio.dao.ProgramacionDespachoDAO;
import com.unicon.autoservicio.util.Util;
import com.unicon.autoservicio.view.bean.UsuarioBean;
import com.unicon.sdc.ds.ws.DocumentoPercepcionBean;
import com.unicon.sdc.ds.ws.GuiaDeRemisionBean;
import com.unicon.sdc.programacion.bs.ws.DatatypeConfigurationException_Exception;
import com.unicon.view.ManageBeanNames;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.XMLGregorianCalendar;
import org.apache.log4j.Logger;

/**
 *
 * @author jcabrera
 */
public class ExportarPdf extends HttpServlet {

    public static final long serialVersionUID = 1;
    Logger logger = Logger.getLogger(ExportarPdf.class.getName());

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String reporte = request.getParameter("reporte");

        try {


            if (reporte.equals("exportarListaCertificadoCompresion")) {
                exportarListaCertificadoCompresion(request, response);
            }


            if (reporte.equals("exportarListaComunicadoCalidad")) {
                exportarListaComunicadoCalidad(request, response);
            }

            if (reporte.equals("ExportarReporteEstadoDeCuenta")) {
                exportarReporteEstadoDeCuenta(request, response);
            }

            if (reporte.equals("ExportarReporteEstadoDeCredito")) {
                exportarReporteEstadoDeCredito(request, response);
            }

            if (reporte.equals("ExportarReporteHistorialDePagos")) {
                exportarReporteHistorialDePagos(request, response);
            }



            if (reporte.equals("ExportarReporteEntregaPorClienteObra")) {

                exportarReporteEntregaPorCliente(request, response);
            }

            if (reporte.equals("exportarListaComprobantesPercecpion")) {

                exportarListaComprobantesPercecpion(request, response);
            }

            /* JMENDOZA | 20140217 | Proy. 817: Se agrega exportación en PDF de Programacion Semanal */
            if (reporte.equals("ExportarProgramaSemana")) {
                exportarProgramaSemana(request, response);
            }

            /* JMENDOZA | 20140217 | Proy. 817: Se agrega exportación en PDF de Reporte Historico */
            if (reporte.equals("ExportarReporteHistorico")) {
                exportarReporteHistorico(request, response);
            }





        } catch (Exception e) {

            StringBuffer sb = new StringBuffer("ERROR EXPORTANDO A PDF ");
            logger.error(sb.toString(), e);
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private void exportarListaCertificadoCompresion(HttpServletRequest request, HttpServletResponse response) throws IOException {
        CalidadDAO calidadDao = new CalidadDAO();;
        HttpSession session = request.getSession();

        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);

 
        String lista = request.getParameter("lista");
        lista = lista.substring(0, lista.length() - 1);
        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        ArrayList<GuiaDeRemisionBean> certificados = new ArrayList<GuiaDeRemisionBean>();
        String[] certificadosArray = lista.split(",");

        for (int i = 0; i < certificadosArray.length; i++) {
            String[] numeroCertificadoArray = certificadosArray[i].split("-");
            GuiaDeRemisionBean gui = new GuiaDeRemisionBean();
            gui.setSerieGuia(numeroCertificadoArray[0]);
            gui.setNumeroGuia(numeroCertificadoArray[1]);
            certificados.add(gui);
        }

        byte[] resultado = null;
        if (lista.length() > 0) {
            resultado = calidadDao.exportarCertificadoCompresion(certificados, usuario.getUsuario(), usuario.getClave());
            sb.append("attachment; filename=CertificadosCompresion_Unicon");
            sb.append(".pdf");
            nombreArchivo = sb.toString();
        }


        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    private void exportarListaComunicadoCalidad(HttpServletRequest request, HttpServletResponse response) throws IOException {
        CalidadDAO calidadDao = new CalidadDAO();;
        HttpSession session = request.getSession();

        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);


        String lista = request.getParameter("lista");
        lista = lista.substring(0, lista.length() - 1);


        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        ArrayList<GuiaDeRemisionBean> certificados = new ArrayList<GuiaDeRemisionBean>();
        String[] certificadosArray = lista.split(",");

        for (int i = 0; i < certificadosArray.length; i++) {
            String[] numeroCertificadoArray = certificadosArray[i].split("-");
            GuiaDeRemisionBean gui = new GuiaDeRemisionBean();
            gui.setSerieGuia(numeroCertificadoArray[0]);
            gui.setNumeroGuia(numeroCertificadoArray[1]);
            gui.setMotivoPerdida(numeroCertificadoArray[2]);
            certificados.add(gui);
        }

        byte[] resultado = null;
        if (lista.length() > 0) {
            resultado = calidadDao.exportarComunicadoCalidad(certificados, usuario.getUsuario(), usuario.getClave());
            sb.append("attachment; filename=ComunicadoDeCalidad_Unicon");
            sb.append(".pdf");
            nombreArchivo = sb.toString();
        }


        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    private void exportarReporteEstadoDeCuenta(HttpServletRequest request, HttpServletResponse response) throws IOException {


        CreditosDAO creditosDao = new CreditosDAO();

        String codigoCliente = request.getParameter("codigoCliente");
        String codigoObra = request.getParameter("codigoObra");
        HttpSession session = request.getSession();

        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);

        SimpleDateFormat sdfFechaHora = new SimpleDateFormat("dd/MM/yyyy  HH:mm");
        Date fechaExportacion = new Date(System.currentTimeMillis());
        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        byte[] resultado = null;

        resultado = creditosDao.exportarReporteEstadoDeCuenta(codigoCliente, codigoObra, usuario.getUsuario(), usuario.getClave());
        sb.append("attachment; filename=estado_de_cuenta_").append(codigoCliente).append("_").append(sdfFechaHora.format(fechaExportacion).toString());
        sb.append(".pdf");
        nombreArchivo = sb.toString();



        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    private void exportarReporteHistorialDePagos(HttpServletRequest request, HttpServletResponse response) throws IOException {


        FacturacionDAO facturacionDao = new FacturacionDAO();;
        HttpSession session = request.getSession();
        String codigoCliente = request.getParameter("codigoCliente");
        String codigoObra = request.getParameter("codigoObra");

        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);


        Long desdeLong = Long.parseLong(request.getParameter("desde"));
        Date desde = new Date(desdeLong);
        Long hastaLong = Long.parseLong(request.getParameter("hasta"));
        Date hasta = new Date(hastaLong);
        SimpleDateFormat sdfFechaHora = new SimpleDateFormat("dd/MM/yyyy");
        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        byte[] resultado = null;


        resultado = facturacionDao.exportarReporteHistorialDePagos(codigoCliente, codigoObra, desde, hasta, usuario.getUsuario(), usuario.getClave());
        sb.append("attachment; filename=historial_de_Pagos_").append(codigoCliente).append("_").append(sdfFechaHora.format(desde).toString()).append("_al_").append(sdfFechaHora.format(hasta).toString());
        sb.append(".pdf");
        nombreArchivo = sb.toString();




        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    private void exportarReporteEstadoDeCredito(HttpServletRequest request, HttpServletResponse response) throws IOException {


        CreditosDAO creditosDao = new CreditosDAO();;
        HttpSession session = request.getSession();
        String codigoCliente = request.getParameter("codigoCliente");

        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);


        SimpleDateFormat sdfFechaHora = new SimpleDateFormat("dd/MM/yyyy  HH:mm");
        Date fechaExportacion = new Date(System.currentTimeMillis());
        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        byte[] resultado = null;

        resultado = creditosDao.exportarReporteEstadoDeCredito(codigoCliente, usuario.getUsuario(), usuario.getClave());
        sb.append("attachment; filename=estado_de_credito_").append(codigoCliente).append("_").append(sdfFechaHora.format(fechaExportacion).toString());
        sb.append(".pdf");
        nombreArchivo = sb.toString();



        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    private void exportarReporteEntregaPorCliente(HttpServletRequest request, HttpServletResponse response) throws IOException {

        FacturacionDAO facturacionDao = new FacturacionDAO();;
        HttpSession session = request.getSession();
        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);

        String codigoCliente = request.getParameter("codigoCliente");
        String codigoObra = request.getParameter("codigoObra");
        String codigoAcuerdo = request.getParameter("codigoAcuerdo");

        Long desdeLong = Long.parseLong(request.getParameter("desde"));
        Date desde = new Date(desdeLong);
        Long hastaLong = Long.parseLong(request.getParameter("hasta"));
        Date hasta = new Date(hastaLong);
        SimpleDateFormat sdfFechaHora = new SimpleDateFormat("dd/MM/yyyy");
        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();



        byte[] resultado = null;


        resultado = facturacionDao.exportarReporteEntregasPorClienteObra(desde, hasta, codigoAcuerdo, codigoObra, codigoCliente, usuario.getUsuario(), usuario.getClave());
        sb.append("attachment; filename=entregas_por_cliente_obra").append(codigoCliente).append("_").append(sdfFechaHora.format(desde).toString()).append("_al_").append(sdfFechaHora.format(hasta).toString());
        sb.append(".pdf");
        nombreArchivo = sb.toString();



        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    private void exportarListaComprobantesPercecpion(HttpServletRequest request, HttpServletResponse response) throws IOException {
        FacturacionDAO facturacionDAO = new FacturacionDAO();
        HttpSession session = request.getSession();
        UsuarioBean usuario = (UsuarioBean) session.getAttribute(ManageBeanNames.BEAN_USUARIO);


        String lista = request.getParameter("lista");
        lista = lista.substring(0, lista.length() - 1);
        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        ArrayList<DocumentoPercepcionBean> documentos = new ArrayList<DocumentoPercepcionBean>();
        String[] documentosArray = lista.split(",");



        for (int i = 0; i < documentosArray.length; i++) {
            String secuenciaDocumento = documentosArray[i].toString();
            DocumentoPercepcionBean doc = new DocumentoPercepcionBean();
            doc.setSecuenciaDocumento(secuenciaDocumento);

            documentos.add(doc);
        }

        byte[] resultado = null;
        if (lista.length() > 0) {
            resultado = facturacionDAO.exportarDocumentoPercepcion(documentos, usuario.getUsuario(), usuario.getClave());

        }


        if (resultado.length > 0 && resultado != null) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();





        }
    }

    //<editor-fold defaultstate="collapsed" desc="Metodos exportación Programacion y Despacho">
    /* JMENDOZA | 20140218 | Proy. 817 */
    private void exportarProgramaSemana(HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException, DatatypeConfigurationException, DatatypeConfigurationException_Exception {

        XMLGregorianCalendar fecIni, fecFin;
        SimpleDateFormat sdfFecha = new SimpleDateFormat("dd/MM/yyyy");
        ProgramacionDespachoDAO programacionDao = new ProgramacionDespachoDAO();

        String cousu = request.getParameter("cousu");
        String cocli = request.getParameter("cocli");
        String feini = request.getParameter("feini");
        String fefin = request.getParameter("fefin");
        String coobr = request.getParameter("coobr");

        fecIni = Util.dateToXMLGregorian(sdfFecha.parse(feini));
        fecFin = Util.dateToXMLGregorian(sdfFecha.parse(fefin));

        SimpleDateFormat sdfFechaHora = new SimpleDateFormat("dd/MM/yyyy  HH:mm");
        Date fechaExportacion = new Date(System.currentTimeMillis());

        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        byte[] resultado = null;

        resultado = programacionDao.exportarProgramaSemanal(cousu, cocli, fecIni, fecFin, coobr, "", "");


        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }

    /* JMENDOZA | 20140306 | Proy. 817: Se agrega nuevo parámetro para identificar el tipo de consulta */
    /* 20140306-01 | INICIO */
    private void exportarReporteHistorico(HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException, DatatypeConfigurationException, DatatypeConfigurationException_Exception {

        XMLGregorianCalendar fecIni, fecFin;
        SimpleDateFormat sdfFecha = new SimpleDateFormat("dd/MM/yyyy");
        ProgramacionDespachoDAO programacionDao = new ProgramacionDespachoDAO();

        String codUsu = request.getParameter("usu");
        String codCli = request.getParameter("cli");
        String feIni = request.getParameter("feini");
        String feFin = request.getParameter("fefin");
        String codObra = request.getParameter("obr");
        String codOrd = request.getParameter("ord");

        fecIni = Util.dateToXMLGregorian(sdfFecha.parse(feIni));
        fecFin = Util.dateToXMLGregorian(sdfFecha.parse(feFin));

        SimpleDateFormat sdfFechaHora = new SimpleDateFormat("dd/MM/yyyy  HH:mm");
        Date fechaExportacion = new Date(System.currentTimeMillis());

        String nombreArchivo = "";
        StringBuffer sb = new StringBuffer();

        byte[] resultado = null;

        resultado = programacionDao.exportarReporteHistorico(codUsu, codCli, fecIni, fecFin, codObra, codOrd, "2");

        if (resultado.length > 0) {

            response.setContentType("application/pdf");
            response.setContentLength(resultado.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(resultado, 0, resultado.length);
            ouputStream.flush();
            ouputStream.close();
        }

    }
    /* 20140306-01 | FIN */
    //</editor-fold>
}
